Database Tutorials Joined-table Inheritance গাইড ও নোট

265

Joined-table Inheritance হল একটি ORM (Object-Relational Mapping) প্রযুক্তির একটি প্যাটার্ন, যা একটি ক্লাস হায়ারার্কিকে একাধিক টেবিলে ভাগ করে রাখা হয়। Flask-SQLAlchemy ব্যবহার করে, Joined-table Inheritance ডিজাইন করতে গেলে, সিংহভাগ ক্লাস মডেলগুলির জন্য আলাদা আলাদা টেবিল তৈরি করা হয় এবং ক্লাসগুলির মধ্যে সম্পর্ক বজায় রাখতে একটি মূল টেবিল থেকে ডেটা যুক্ত করা হয়।

এটি মূলত নিম্নলিখিত তিনটি ধাপে কাজ করে:

  1. Parent Class: একটি মৌলিক বা অভ্যন্তরীণ ক্লাস যা সাধারণ ক্ষেত্র বা অঙ্গসংস্থান ধারণ করে।
  2. Child Classes: এই ক্লাসগুলি মূল Parent ক্লাস থেকে বংশানুক্রমে লাভ করা হয় এবং এগুলি parent class এর জন্য অতিরিক্ত ক্ষেত্র ধারণ করে। এগুলি পৃথক টেবিল হতে পারে কিন্তু তাদের মধ্যে সম্পর্ক Parent ক্লাসের সাথে থাকে।
  3. JOIN: যখন query করা হয়, তখন Child ক্লাসের সাথে Parent ক্লাসের ডেটা সংযুক্ত (joined) হয়ে আসে।

এখন, Flask-SQLAlchemy-তে Joined-table Inheritance বাস্তবায়নের জন্য কিছু উদাহরণ দেখানো যাক:


Step 1: Flask Setup and Required Libraries

প্রথমে Flask এবং Flask-SQLAlchemy ইন্সটল করতে হবে যদি তা না থাকে।

pip install flask flask-sqlalchemy

Step 2: Define the Base Model and Child Models

এখন, আমরা Parent ক্লাস এবং দুটি Child ক্লাস ডিফাইন করব।

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

# Base Model (Parent Class)
class Animal(db.Model):
    __tablename__ = 'animals'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    
    __mapper_args__ = {
        'polymorphic_identity': 'animal',
        'polymorphic_on': id
    }

    def __init__(self, name):
        self.name = name

# Dog Model (Child Class)
class Dog(Animal):
    __tablename__ = 'dogs'
    id = db.Column(db.Integer, db.ForeignKey('animals.id'), primary_key=True)
    breed = db.Column(db.String(50))

    __mapper_args__ = {
        'polymorphic_identity': 'dog'
    }

    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed

# Cat Model (Child Class)
class Cat(Animal):
    __tablename__ = 'cats'
    id = db.Column(db.Integer, db.ForeignKey('animals.id'), primary_key=True)
    color = db.Column(db.String(50))

    __mapper_args__ = {
        'polymorphic_identity': 'cat'
    }

    def __init__(self, name, color):
        super().__init__(name)
        self.color = color

Step 3: Database Creation

এখন, আমরা ডেটাবেস তৈরি করব।

@app.before_first_request
def create_tables():
    db.create_all()

Step 4: Inserting Data

এখন, Parent ক্লাস এবং Child ক্লাসে ডেটা ইনসার্ট করব।

@app.route('/')
def index():
    # Create new instances of Animal, Dog, and Cat
    animal = Animal(name="Generic Animal")
    dog = Dog(name="Rex", breed="German Shepherd")
    cat = Cat(name="Whiskers", color="Black")

    db.session.add(animal)
    db.session.add(dog)
    db.session.add(cat)
    db.session.commit()

    return "Animals added!"

Step 5: Querying Data

এখন, আমরা কিছু query করব যাতে Parent ক্লাস এবং Child ক্লাসের তথ্য পাওয়া যায়।

@app.route('/show')
def show():
    animals = Animal.query.all()
    output = ""
    for animal in animals:
        if isinstance(animal, Dog):
            output += f"Dog: {animal.name}, Breed: {animal.breed}<br>"
        elif isinstance(animal, Cat):
            output += f"Cat: {animal.name}, Color: {animal.color}<br>"
        else:
            output += f"Animal: {animal.name}<br>"
    return output

Step 6: Running the Application

এখন Flask অ্যাপ্লিকেশন রান করাতে হবে:

if __name__ == '__main__':
    app.run(debug=True)

Conclusion:

Joined-table Inheritance প্যাটার্নের সাহায্যে, Flask-SQLAlchemy-তে Parent এবং Child ক্লাসের মধ্যে সম্পর্ক সংরক্ষিত হয়, যেখানে Child ক্লাসগুলির জন্য আলাদা টেবিল তৈরি হয় এবং Parent ক্লাসের মাধ্যমে তাদের মধ্যে সম্পর্ক তৈরি হয়। এতে কোডের পুনঃব্যবহারযোগ্যতা বাড়ে এবং ডেটাবেসে বিভিন্ন ধরনের সম্পর্কের মধ্যে সংযোগ বজায় রাখা সম্ভব হয়।

এটা আপনার অ্যাপ্লিকেশনে ডেটাবেস সম্পর্কের আরও কার্যকরী এবং প্রসারিত পদ্ধতি হতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...